// protocol 协议
#pragma once
#include "localcommon.hpp"
#include "localsocket.hpp"

// Request->计算机输入->序列化&反序列化
// Response->计算机输出->序列化&反序列化

// 约定好各个字段的含义，本质就是约定好协议！
// client -> server
// 如何要做序列化和反序列化：
// 1. 我们自己写(怎么做) ---> 往往不具备很好的扩展性
// 2. 使用现成的方案(这个是我们要写的) ---> json -> jsoncpp

class Request
{
public:
    /**********Request**************/
    Request() {}
    ~Request() {}
    /**********成员函数**************/
    std::string Serialize()
    {
        // _x = 10 _y = 20, _oper = '+'
        // "10" "20" '+' : 用空格作为分隔符
    }
    bool Deserialize(std::string &in)
    {
        // "10" "20" '+' -> 以空格作为分隔符 -> 10 20 '+'
    }

private:
    int _x;
    int _y;
    char _oper; // + - * / % -> _x _oper _y -> 10 + 20
};

class Response
{
public:
    /**********Response**************/
    Response() {}
    ~Response() {}
    /**********成员函数**************/
    std::string Serialize()
    {
    }
    bool Deserialize(std::string &in)
    {
    }

private:
    int _value; // 运算结果，无法区分清楚应答是计算结果，还是异常值
    int _code;  // 0:sucess, 1,2,3,4->不同的运算异常的情况
};

class Protocol
{
public:
    /**********Protocol**************/
    Protocol() {}
    ~Protocol() {}
    /**********成员函数**************/
    void GetRequest(std::shared_ptr<Local_Sock_Mod::Socket> &sockfd, Local_Inetaddr::Inetaddr &client)
    {
    }

private:
};
